package scene;

import geometrie.Point;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
 * 
 * Class Modele3D qui contient 
 * l'ensemble des Facettes
 *
 */
public class Forme implements Modele3D {
	/**
	 * Liste des Facettes
	 */
	private List<Facette3D> liste;
	/**
	 * Nom de la Forme
	 *   ex. "Bunny","Homer","Circle",etc.
	 */
	private String nom = new String();
	
	/**
	 * Constructeur vide
	 */
	public Forme(){
		liste = new ArrayList<Facette3D>();
		liste.clear();
	}
	/**
	 * Constructeur pour commencer la liste
	 * avec la premiere Facette
	 * @param f la premiere facette
	 */
	public Forme(Facette3D f){
		liste = new ArrayList<Facette3D>();
		liste.add(f);
	}
	
	/*
	 * 
	 * Constructor de prueba.. no sabe kpe'o
	 * 
	 */
	public Forme(String nomFichier){
		liste = new ArrayList<Facette3D>();
		this.nom = new String(nomFichier);
		liste = ModeleMaillage.construitModel(nomFichier);
	}
	/**
	 * Ajouter une facette sur la liste
	 * @param f Facette à ajouter
	 */
	public void addFacette(Facette3D f){
		liste.add(f);
	}
	/**
	 * Ajouter une facette sur l'index donné
	 * @param index de la liste
	 * @param f facette ajoutée
	 */
	public void addFacette(int index, Facette3D f){
		liste.add(index, f);
	}
	/**
	 * Obtenir la facette avec l'index donné
	 * @param index de la facette
	 * @return la facette
	 */
	public Facette3D getFacette(int index){
		return liste.get(index);
	}
	/**
	 * Verifier si le liste est vide
	 * @return vrai/faux
	 */
	public boolean isEmpty(){
		return liste.isEmpty();
	}
	/**
	 * Eliminer la facette sur l'index donné.
	 * @param index sur la liste
	 */
	public void remove(int index){
		if(index < getSize())
			liste.remove(index);
		else
			throw new IndexOutOfBoundsException();
	}
	/**
	 * Obtenir le taille de la liste
	 * @return taille
	 */
	public int getSize(){
		return liste.size();
	}
	/**
	 * Obtenir l'Iterateur pour parcourir la liste.
	 */
	@Override
	public Iterator<Facette3D> getFacettes() {
		return liste.iterator();
	}
	/**
	 * Obtenir la liste des facettes
	 * @return liste
	 */
	public List<Facette3D> getList(){
		return liste;
	}
	/**
	 * Obtenir le nom de la Forme
	 * @return nom
	 */
	public String getNom(){
		return nom;
	}
	/** 
	 * Etablir le nom de la forme
	 * @param nom
	 */
	public void setNom(String nom){
		this.nom = new String(nom);
	}
	@Override
	public void triangulePolygone(Point[] point) {
		// TODO Auto-generated method stub
		
	}
}
